package yl.hs.bmipfull.daos.production;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import yl.hs.bmipfull.daos.BaseDao;
import yl.hs.bmipfull.pojo.production.ProductionTaskEntity;
import yl.hs.bmipfull.viewmodels.chart.SiteProductionDegreeVO;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 作用:  生产任务表持久层接口<br/>
 * 创建时间: 2021年05月26日 11时23分11秒 <br/>
 *
 * @author 张凯
 */
@Repository
public interface IProductionTaskDao extends BaseDao<ProductionTaskEntity> {

    /**
     * 查询生产任务表信息
     *
     * @param map 查询条件 {@link ProductionTaskEntity}
     * @return 生产任务表-List<{@link ProductionTaskEntity}>
     */
    List<ProductionTaskEntity> queryList(@Param("map") Map<String, Object> map);

    /**
     * 分页查询生产任务表信息
     *
     * @param map 查询条件 {@link ProductionTaskEntity}
     * @return 站内信息-List<{@link ProductionTaskEntity}>
     */
    List<ProductionTaskEntity> queryPage(@Param("map") Map<String, Object> map,@Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据查询条件统计数据数量
     *
     * @param query 查询条件
     * @return 数据数量
     */
    Integer queryCountByCondition(@Param("map") Map<String, Object> query,@Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据生产任务信息编号修改状态
     *
     * @param snArray 生产任务信息编号数组
     * @param state s
     * @return s
     */
    Integer changeStateBySn(String[] snArray, short state);

    /**
     * 查询生产任务中的生产任务
     *
     * @return s
     */
    List<ProductionTaskEntity> queryTaskSc(String productCateSN);

    /**
     * 根据生产任务状态和工地名称查询生产任务信息
     *
     * @param state       生产任务状态
     * @param projectName 工地名称
     * @return s
     */
    List<ProductionTaskEntity> getTaskByState(@Param("map") Map<String, Object> query, short state, String projectName);

    /**
     * 根据生产任务状态查询生产任务信息
     *
     * @param state 生产任务状态
     * @return s
     */
    List<ProductionTaskEntity> getTaskByStateGroupProject(@Param("map") Map<String, Object> query, short state);

    /**
     * 根据生产线编号查询生产任务信息
     * @param lineSn 生产线编号
     * @return 生产任务信息
     */
    List<ProductionTaskEntity> queryListByLineSn(String lineSn);
    /**
     * 根据传入参数模糊查询生产任务
     * @param Condition 条件字符串
     * @return 生产任务信息
     */
    List<ProductionTaskEntity> queryListByCondition(String catesn,String Condition);

    /**
     *
     * 获取计划量
     * @param cateSn 种类编号
     * @param type 1：本月，2：当天，3：明天
     * @return 计划量
     */
    BigDecimal getPlanQuantity(String cateSn,int type);

    /**
     * 获取未设配比行数
     * @return 行数
     */
    Integer getNoProportioning();

    /**
     * 工地生产程度
     * @return list
     */
    List<SiteProductionDegreeVO> getSiteProductionDegree();

    /**
     * 获取产品类别的生产中的生产任务
     * @param sn 产品类别编号集合
     * @return 生产任务
     */
    ProductionTaskEntity findProductCateRunningTask(String sn);
    /**
     * 修改出资料状态
     * @param sn 生产任务编号
     * @param generateTeport 更改值
     * @return 影响行数
     */

    Integer updateGenerateTeport(String sn,boolean generateTeport);

    /**
     *  根据时间单位查询计划产量
     * @param timeType 1. 日 ， 2.月 3. 年
     * @param productCateSn s
     */
    String getPlannedOutputSum( String productCateSn, String timeType);


    String getRingPeriod(String systemSet,String timeType);

    String getPreviousCycleOfProductOutput(String product, String timeType);



    int getProduction();

    int getSuspend();

    int getCompleted();

    int getToBeCooperated();

    List<ProductionTaskEntity> queryListBySNList(@Param("snList") List<String> snList);
}